In today's network computing environments, dozens, hundreds, or even thousands of individual machines may co-exist to perform a variety of computing jobs. A computing job (hereinafter “job”) is generally created by a user to automatically perform a wide range of common tasks. For example, some jobs are created to prepare machines to execute tasks (hereinafter “config jobs”). Some jobs are created to clean up machines after running the tasks. Other jobs are created to run the tasks themselves. Some jobs may even be created to do a combination of all three. These different roles of jobs can be classified as config, cleanup, and regular jobs.
In order for the tasks to run successfully on a properly prepared machine, a user needs to ensure that the right jobs are run in the right order. In general, the config jobs, the regular jobs, and the cleanup jobs are not associated with each other. Therefore, a user must manually configure the machines and schedule the jobs to ensure that the right jobs are run on the right machines in the right order. Such a process can be time-consuming if hundreds or thousands of machines need to be configured. Such a process can also make it difficult for people to share tasks, because different tasks may require different setup and cleanup jobs.
In addition, because no apparent connection exists among a config job, a regular job, and a cleanup job, it is hard to optimize the machine preparation process to reduce the number of config and cleanup jobs to be run on different machines. For example, if two regular jobs share the same config and cleanup jobs, conventionally, the config and cleanup jobs are repeated for each of the two regular jobs. It would be more efficient to run the config and the cleanup job only once for both the two regular jobs.
Therefore, there exists a need to automatically schedule jobs such as config jobs and cleanup jobs based on the requirements of other jobs, such as regular jobs. There also exists a need to dynamically prepare machines according to the requirements of a job.